home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Internet / News / Alexandra.0.82 / Source / Preferences.subproj / PreferencesManager.m < prev   
Encoding:
Text File  |  1996-01-31  |  5.2 KB  |  227 lines

  1.  
  2. #import <misckit/misckit.h>
  3. #import "../Alexandra.h"
  4. #import "PreferencesManager.h"
  5. #import "PMCompose.h"
  6. #import "PMArticleText.h"
  7. #import "PMArticleList.h"
  8. #import "PMGeneral.h"
  9. #import <dbkit/DBTableView.h>
  10.  
  11. @class Article;
  12.  
  13. @implementation PreferencesManager
  14.  
  15. //-----------------------------------------------------------
  16. // INIT
  17. //-----------------------------------------------------------
  18.  
  19. + initialize
  20.     {
  21.     static NXDefaultsVector myDefaults = {
  22.                 {DEFAULT_ARTICLE_FONT,"Courier 12pt"},
  23.                 {DEFAULT_QUOTING_PREFIX,">"},
  24.                 {DEFAULT_HEADER_FILTER,"From:Organization:Subject:Date:"},
  25.                 {DEFAULT_APPEND_SIG,"NO"},
  26.                 {DEFAULT_SHOW_SUBJECT,"YES"},
  27.                 {DEFAULT_SHOW_AUTHOR,"YES"},
  28.                 {DEFAULT_SHOW_SIZE,"YES"},
  29.                 {DEFAULT_SMALL_ARTICLE,"25"},
  30.                 {DEFAULT_LARGE_ARTICLE,"250"},
  31.                 {DEFAULT_QUICK_KILL,"NO"},
  32.                 {DEFAULT_KEY_BASE,"emacs"},
  33.                 {DEFAULT_KEY_BINDINGS,""},
  34.                 {DEFAULT_XHEADER_COUNT,"7"},
  35.                 {DEFAULT_KILL_BEHAVIOUR,"2"},
  36.                 {DEFAULT_SIG_DETECTION,"YES"},
  37.                 {DEFAULT_REWRAP_ARTICLE_TEXT,"YES"},
  38.                 {DEFAULT_HEADER_MODE,"2"},
  39.                 {DEFAULT_CHECKNN_ACTIVATION,"NO"},
  40.                 {DEFAULT_CHECKNN_PERIOD,"0"},
  41.                 {DEFAULT_SAVE_PATH,"/tmp"},
  42.                 {NULL} };
  43.     const char    *fontname=[NXApp defaultValue:"NXFixedPitchFont"],
  44.                 *fontsize=[NXApp defaultValue:"NXFixedPitchFontSize"];
  45.     char        buf[1000];
  46.     
  47.     if(fontname)
  48.         {
  49.         if(fontsize)
  50.             sprintf(buf,"%s %spt",fontname,fontsize);
  51.         else
  52.             sprintf(buf,"%s 12pt",fontname);
  53.         myDefaults[0].value=NXCopyStringBuffer(buf);
  54.         }
  55.     [NXApp registerDefaults:myDefaults];
  56.     return self;
  57.     }
  58.  
  59.  
  60. - init
  61.     {
  62.     [super init];
  63.     
  64.     list=[[MiscList alloc] init];
  65.     pHeaderController=[[[MiscTableController alloc] init] setDelegate:self];
  66.     aHeaderController=[[[MiscTableController alloc] init] setDelegate:self];
  67.     [ERROR_MANAGER addObserver:self selector:@selector(externalUpdate:)
  68.                         forError:ENOTEPrefsChanged];
  69.     return self;
  70.     }
  71.  
  72.  
  73. - awakeFromNib
  74.     {
  75.     if(aHeaders)
  76.         {
  77.         NXAtom    ids[]={[KVPair keyIdentifier],NULL};
  78.         
  79.         [aHeaderController setTableView:aHeaders withIdentifiers:ids];
  80.         }
  81.     if(pTableView)
  82.         {
  83.         NXAtom    ids[]={[KVPair keyIdentifier],[KVPair valueIdentifier],NULL};
  84.  
  85.         [pHeaderController setTableView:pTableView withIdentifiers:ids];
  86.         }
  87.     return self;
  88.     } 
  89.  
  90.  
  91. //-----------------------------------------------------------
  92. // FREE 
  93. //-----------------------------------------------------------
  94.  
  95. - free
  96.     {
  97.     list=[list free];
  98.     pHeaderController=[pHeaderController free];
  99.     aHeaderController=[aHeaderController free];
  100.     return [super free];
  101.     }
  102.  
  103.  
  104.  
  105. //-----------------------------------------------------------
  106. // PREFERENCES PANEL
  107. //-----------------------------------------------------------
  108.  
  109. - openPanel:sender;
  110.     {
  111.     if(!thePanel)
  112.         [NXApp loadNibSection:"Preferences.nib" owner:self];
  113.     if(![thePanel isVisible])
  114.         [self readPreferences:self];    
  115.     [thePanel makeKeyAndOrderFront:sender];
  116.     return self;
  117.     }
  118.  
  119.  
  120. - readPreferences:sender;
  121.     {
  122.     [self readGeneralPrefs];
  123.     [self readArticleListPrefs];
  124.     [self readArticleTextPrefs];
  125.     [self readPostingPrefs];
  126.     [thePanel setDocEdited:NO];
  127.     [thePanel display];
  128.     return self;
  129.     }
  130.  
  131.  
  132. - writePreferences:sender;
  133.     {
  134.     [self writePostingPrefs];
  135.     [self writeArticleTextPrefs];
  136.     [self writeArticleListPrefs];
  137.     [self writeGeneralPrefs];
  138.     [thePanel setDocEdited:NO];
  139.     EM_ERROR(ENOTEPrefsChanged,self,NULL);
  140.     EM_ERROR(ENOTEPrefsChanged2,self,NULL);
  141.  
  142.     return self;                
  143.     }
  144.  
  145.  
  146. - markDirty:sender;
  147.     {
  148.     [thePanel setDocEdited:YES];
  149.     return self;    
  150.     }
  151.  
  152. - showPathSelectPanel:sender
  153. {
  154.     id panel =[OpenPanel new];
  155.  
  156.     [panel allowMultipleFiles:NO];
  157.     [panel chooseDirectories:YES];
  158.     
  159.     [panel setDirectory:[gDefaultSavePath stringValue]];
  160.     
  161.     if([panel runModal]!=NX_CANCELTAG){
  162.         [gDefaultSavePath setStringValue:[panel filename]]; //!!!
  163.         [self markDirty:self];
  164.     }
  165.     
  166.     [panel chooseDirectories:NO];
  167.     
  168.     return self;
  169. }
  170.     
  171.  
  172. //-----------------------------------------------------------
  173. //    EXTERNAL UPDATES
  174. //-----------------------------------------------------------
  175.  
  176. - externalUpdate:(EMErrorInfo *)info;
  177.     {
  178.     if([info userData1]!=self)
  179.         {
  180.         if([thePanel isDocEdited])
  181.             EM_ERROR(EPREFShouldMerge,NULL,NULL);
  182.         [self readPreferences:nil];
  183.         }
  184.     return self;
  185.     }
  186.  
  187.     
  188.  
  189. //-----------------------------------------------------------
  190. // DELEGATE METHODS 
  191. //-----------------------------------------------------------
  192.  
  193. #define STRG_DIDNT_SET_PREF NXLocalString("You have made changes to your preferences, but not yet applied them.  Do you want to set them now or revert back to their old settings?",NULL,"Frage wenn Pref-Fenster geschlossen werden soll, obwohl noch nicht auf set geklickt wurde.")
  194.  
  195. #define STRG_ALERT_CANCEL NXLocalString("Cancel",NULL,"In Alert-Panels")
  196. #define STRG_ALERT_REVERT NXLocalString("Revert",NULL,"In Alert-Panels")
  197. #define STRG_ALERT_SET    NXLocalString("Set",   NULL,"In Alert-Panels")
  198.  
  199.  
  200. - textDidGetKeys:sender isEmpty:(BOOL)flag
  201.     {
  202.     return [self markDirty:sender]; 
  203.     }
  204.  
  205.  
  206. - windowWillClose:(Window *)sender
  207.     {
  208.     int    ret;
  209.     
  210.     if([thePanel isDocEdited])
  211.         {
  212.         ret=NXRunAlertPanel("ALEXANDRA",STRG_DIDNT_SET_PREF,STRG_ALERT_SET,
  213.                         STRG_ALERT_REVERT,STRG_ALERT_CANCEL);
  214.         if(ret==NX_ALERTOTHER)
  215.             return nil;
  216.         if(ret==NX_ALERTDEFAULT)
  217.             [self writePreferences:self];
  218.         }
  219.     return self;
  220.     }
  221.  
  222. //-----------------------------------------------------------
  223. // THAT'S IT
  224. //-----------------------------------------------------------
  225.  
  226. @end
  227.